package com.vonchange.utils.crud.service.dr.impl;

import java.util.Collection;
import java.util.Date;
import java.util.List;

import jodd.bean.BeanUtil;

import com.bstek.dorado.data.entity.EntityState;
import com.bstek.dorado.data.entity.EntityUtils;
import com.bstek.dorado.data.provider.Page;
import com.vonchange.headb.core.map.HeaMap;
import com.vonchange.utils.crud.dao.IBaseDao;
import com.vonchange.utils.crud.service.dr.IDRService;

public abstract class DRServiceImpl<T> implements IDRService<T>{
	public abstract IBaseDao<T> getDao();//

	@Override
	public Page<T> findPageDR(Page<T> page, HeaMap parameter) {
		return getDao().findPageDR(page, parameter);
	}
	@Override
	public List<T> findListDR(HeaMap parameter) {
		return getDao().findList(parameter);
	}
	public void initSave(T bean){
		
	}
	public void initUpdate(T bean){
		
	}
	@Override
    public Integer updateCudDR(Collection<T> datas){
    	for (T bean : datas) {
    		if (EntityUtils.getState(bean).equals(EntityState.NEW)) {
    			if(BeanUtil.hasProperty(bean, "createTime")){
					BeanUtil.setProperty(bean, "createTime", new Date());
				}
    			initSave(bean);
    			getDao().save(bean);
			}
			if (EntityUtils.getState(bean).equals(EntityState.DELETED)) {
				if(BeanUtil.hasProperty(bean, "isDelete")){
					BeanUtil.setProperty(bean, "isDelete", 1);
					if(BeanUtil.hasProperty(bean, "updateTime")){
						BeanUtil.setProperty(bean, "updateTime", new Date());
					}
					getDao().update(bean);
				}else{
					//不能真删除
				}		
			}
			if (EntityUtils.getState(bean).equals(EntityState.MODIFIED)) {
				if(BeanUtil.hasProperty(bean, "updateTime")){
					BeanUtil.setProperty(bean, "updateTime", new Date());
				}
				initUpdate(bean);
				getDao().update(bean);
			}
			initCudItem(bean);
    	}
		return 1; 	
    }
	@Override
    public void updateCudDRItem(Collection<T> datas,Object id){
		for (T bean : datas) {
    		if (EntityUtils.getState(bean).equals(EntityState.NEW)) {
    		    initSaveItem(bean,id);
    			getDao().save(bean);
			}
			if (EntityUtils.getState(bean).equals(EntityState.DELETED)) {
				if(BeanUtil.hasProperty(bean, "isDelete")){
					BeanUtil.setProperty(bean, "isDelete", 1);
					if(BeanUtil.hasProperty(bean, "updateTime")){
						BeanUtil.setProperty(bean, "updateTime", new Date());
					}
					getDao().update(bean);
				}else{
					//不能真删除
				}
			}
			if (EntityUtils.getState(bean).equals(EntityState.MODIFIED)) {
				initUpdate(bean);
				getDao().update(bean);
			}
    	}
    }

	public void initSaveItem(T bean,Object id) {
		// TODO Auto-generated method stub
		
	}

	public  void initCudItem(T bean) {
	
	}
}
